const Express = require('express');
// mongoose
const Mongoose = require('mongoose');

// connect mongo
// 协议 mongodb://192.168.3.100:27017
// mongoose.connect('mongodb://username:password@host:port/database?options...');
const DB_URL = 'mongodb://test:test@192.168.3.100:27017/test';
// 链接成功后回调这个就是监控是不是链接成功了
Mongoose.connection.on('connected', function(){
    console.log('mongo connected');
});
// 进行链接 
Mongoose.connect(DB_URL);

// 链接表 注意表的操作不链接库也能搞，只是没啥效果也不报错所以不需要放在connected回调.
// 增、删、改、查 定义文档模型 Schema 和 model 新建模型
// create remove update find/findOne

// 新建或者链接User表 生成的表user 默认进库后加s 定义结构后可以在后面直接用Mongoose.model("user")链接表 例如app.get('/', (req, res) => {这里的使用
const User = Mongoose.model(/*表名*/'user', /*表结构*/new Mongoose.Schema({
    //字段
    name: /*类型*/{type:String, required: true}, // type 类型 required是否必填
    age: {
        type:Number,
        required:true
    }
}))

// 操作表 {} 类似 sql的 where
// 插入
User.create({
    name: 'imooc',
    age: 333
},function(err, doc){
    // err 错误
    // doc 成功后的文档
    // 插入成功回调
    if(!err){
        console.log('created', err, doc);
    }
})
// 查询操作参照 app.get find findOne find({})如果只有一条 [{}] findOne() 得到的就是{}
// 删除数据 {} 条件什么不写就删除所有的慎用
User.remove({age:18}, (err, doc) => {
    if(!err){
        console.log('remove done', doc); // doc { n: 0, ok: 1 } n 操作了多少条 ok 本次操作成功
    }else{
        console.log(err);
    }
});

// 修改
// 第一个条件，第二个set 这样只能更新一条多条参照https://blog.csdn.net/wenwen360360/article/details/78339221
User.update({name: 'imooc'}, {'$set':{age:2,name:3}}, (err, doc) => {
    if(!err){
        console.log('remove done', doc); // doc { n: 0, ok: 1 } n 操作了多少条 ok 本次操作成功
    }else{
        console.log(err);
    }
})

// 配置
const Config = {
    host: '0.0.0.0',
    port: 3309,
}

// 创建服务
const app = Express();

// 拦截get请求是/的
app.get('/', (req, res) => {
    Mongoose.model('user').find({}, (err, doc) => {
        if(!err){
            res.json(doc)
        }else{
            res.json({
                status: -1
            })
        }
    })
    // User.findOne({}, (err, doc) => {
    //     if(!err){
    //         res.json(doc)
    //     }else{
    //         res.json({
    //             status: -1
    //         })
    //     }
    // })
})

// 开启服务监听
app.listen(Config.port, Config.host, () => {
    console.log('listen');
})